<?php
// 单例模式，是一种常用的软件设计模式。在他的核心结构中只包含一个
// 被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例

// 具体实现，就是以下三点
// ...
// 该类提供私有的构造函数
// 该类包含一个静态的私有属性
// 该类提供一个静态的共有函数 用于创建或获取他本身的静态私有对象
// 当然还要有一个私有的__clone魔术方法,防止克隆

// 优点
// 就是确保所有的对象都访问唯一的实例

class Single
{

    // 私有的静态属性
    private static $getInstance;

    // 私有的析构方法
    private function __construct(private string $name)
    {
    }

    // 私有的克隆方法
    private function __clone()
    {
    }

    // 共有的静态方法

    public static function getInstance(string $name)
    {
        if (!self::$getInstance instanceof Single) {
            self::$getInstance = new Single($name);
        }
        return self::$getInstance;
    }

    public function getName()
    {
        return $this->name;
    }
}



$dog1 = Single::getInstance('法外狂徒张三');

$dog2 = Single::getInstance('张麻子');

// 他两是true熬  看getInstance就懂
var_dump($dog1 === $dog2);

// 这里为什么输出是两次法外狂徒张三 你也能想到吧

// bool(true)
// 法外狂徒张三法外狂徒张三
echo $dog1->getName();
echo $dog2->getName();



